package com.qdxwx.data.service.order;

import com.qdxwx.common.json.AjaxResult;
import com.qdxwx.common.page.PageRequest;
import com.qdxwx.models.course.Course;
import com.qdxwx.models.member.MemberSale;
import com.qdxwx.models.order.Order;
import com.qdxwx.models.order.OrderQuery;
import com.qdxwx.models.order.OrderVO;
import com.qdxwx.models.user.User;

import jakarta.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * Qdx NetSchool Platform
 * @author qdxwx
 * @updateTime 2022/5/25
 * @description
 */
public interface OrderService {

	String createOrderNo(Long userId);
	/**
	 * 创建订单
	 */
	int insert(Order order);
	/**
	 *
	 * @param orderId orderId
	 * @return int
	 */
	int delete(int orderId);

	/**
	 *
	 * @param ids orderIds
	 */
	int deleteByIds(String ids);
	/**
	 * 取消或恢复订单
	 */
	int updateState(Order order);
	/**
	 * 更新订单
	 */
	int updateOrder(Order order);
	/**
	 * 通过ID，查询订单数据
	 */
	Order get(int orderId);
	/**
	 *
	 * @param orderNo orderNo
	 * @return Order
	 */
	Order getByOrderNo(String orderNo);


	List<Order> getList(OrderQuery order, PageRequest page);

	int count(OrderQuery order);

	/**
	 * 个人中心订单查询
	 */
	List<OrderVO> getListForUc(OrderQuery query, PageRequest page);

	/**
	 * 已支付和为支付的订单数量
	 */
	int countByState(String status);

	/**
	 * 订单回调支付成功操作
	 */
	AjaxResult updateCompleteOrder(HttpServletRequest request, Map<String, Object> sourceMap);
	/**
	 * 更新订单状态为成功,网银的回调
	 */
	void updateOrderStatusSuccess(Order order) throws Exception;

	/**
	 * 免费赠送课程
	 * userId 用户id
	 * memberSale 会员商品
	 */
	void addFreeCourse(User user, Course course) throws Exception;
	/**
	 * 免费开通会员
	 * userId 用户id
	 * memberSale 会员商品
	 */
	void addFreeMember(User user, MemberSale memberSale);

	long sumPayAmount(OrderQuery order);

	List<Order> getListByTeacher(OrderQuery order, PageRequest page);

	long countByTeacher(OrderQuery order);

	Order getRepeatOrder(long userId, int otherId, String orderType);

    int updateCombine(long userId1, long userId2);
}
